#!/bin/bash
#---------------------------------------------------------
# в этом участке кода производится парсинг строки
# пример строки "15 18 40 70", результат записывается в массив в виде
# array[0]=15
# array[1]=18 и т.д.
# Необходимо обратить внимание на то какой вид имеет входящая строка.
# Разберем на нашем примере.
# Наша строка содержит 4 пары чисел, но нарисует она только 2 корабля соответсвенно.
# Программа разбивает пары чисел таким образом, что
# (1,5) и (1,8) - это 2 противополодные вершины.
# При вводе строки необходимо подавать на вход координаты левой верхней вершины и
# правой нижней.
# При этом необходимо учитывать, что при вводе вершин для одного корабля, 
# либо 1 и 3 числа должны быть одинаковые (15 18),
# либо 2 и 4 должны быть одинаковы (40 70)

#---------------------------------------------------------
function draw_field(){
#прорисовка поля
	clear
	echo -n "  0 1 2 3 4 5 6 7 8 9"		#прорисовка поля
	echo
	for ((i=0;i<10;i++))		
	do						
		#echo "$i --------------------"
		echo "$i ░░░░░░░░░░░░░░░░░░░░"
	done
}

#---------------------------------------------------------

function parsing() {
	str=$1
	lenght=`expr "$str" : '.*'`  	#вычисление длины строки
	declare -i index=1
	declare -i count=0
	declare -a array[30]
 
	while ((index != 0))
	do
		let count++;
		#echo `expr "$str" : '\( \)'`  #нахождение подстроки (в данном случае 										   #подстрока=пробелу)
		index=`expr index "$str" \ `   #находит номер позиции первого совпадения 										   #подстроки (в данном случае подстрока=пробел)

		if (($index != 0))
		then
			c=`expr $index \- 1`				#последний символ до пробела
			substr=`expr substr "$str" 1 $c`	#нахождение подстроки до пробела 

			array[$i]=`expr substr $substr 1 1`
			array[$i+1]=`expr substr $substr 2 1`
			str=${str#$substr}
			str=${str#\ } 			#убираем пробел стоящий перед следующими 										#координатами
		else
			substr=`expr substr "$str" 1 $lenght`
			array[$i]=`expr substr $substr 1 1`
			array[$i+1]=`expr substr $substr 2 1`
		fi
		let i=i+2
	done
	let amount_param=$lenght-$count+1 	#кол-во параматров(координат кораблей)
	
	draw_field
	draw_ship
}

#---------------------------------------------------------

function draw_ship(){
	declare -i _window_x=`tput lines`
	
	for ((g=0 ; g<$amount_param ; g++))
	do
		let coord_beg_x=${array[$g]}+1 	# (1,2) - начало координат у 															#нашего поля
														#сдвигаем курсор на начало 															#координат нашего поля
		let coord_beg_y=${array[$g+1]}+${array[$g+1]}+2		
		let coord_end_x=${array[$g+2]}+1 										
		let coord_end_y=${array[$g+3]}+${array[$g+3]}+2
		for ((i=coord_beg_y;i<=$coord_end_y;i++))		
		do						 						#цикл, отвечающий за столбцы
			( tput cup $coord_beg_x $i ; echo "██" ) 
		done
		for ((i=coord_beg_x;i<=$coord_end_x;i++))		
		do		   										#цикл, отвечающий за стоки
			( tput cup $i $coord_beg_y ; echo "██" ) 
		done
		let g=g+3
	done

	tput cup $_window_x 0
}
#---------------------------------------------------------
parsing "$1"
#---------------------------------------------------------
